#ifndef PRIMITIVES_STRUCTURE_H
#define PRIMITIVES_STRUCTURE_H

#include "structure.h"

/**** LITTERAL ****/
/* Cree un litteral */
Litteral* creerLitteral( int variable );

/* Affiche un litteral (debug) */
void afficherLitteral( Litteral l );


/**** CLAUSE ****/
/* Cree une clause */ 
Clause* creerClause( );

/* Ajoute un litteral l a une clause c */
void ajouterLitteralClause( Clause *c, Litteral *l );

/* Affiche une clause (debug) */
void afficherClause( Clause c, Formule f );

/* Libere une clause de la memoire */
void freeClause( Clause *c );


/*** FORMULE ****/
/* Cree une formule */
Formule* creerFormule( );

/* Affiche une formule (debug) */
void afficherFormule( Formule f );

/* Libere une formule de la memoire */
void freeFormule( Formule *f );

/* Charge une formule depuis l'entree standard */
Formule* chargerFormule( );


/**** LISTE DE CLAUSE ****/
/* Cree une liste de clause */
ListeClause* creerListeClause( Clause *c, int signe );

/* Libere la liste de clauses de la memoire */
void freeListeClause( ListeClause *l );


/**** LISTE DE LITTERAUX ****/
/* Cree une liste de litteraux de taille nbLitteraux */
ListeLitteraux* creerListeLitteraux( int nbLitteraux );

/* Ajoute la clause a la liste de litteraux a l'emplacement i */
void ajouterClauseListe( ListeLitteraux *listeLitteraux, int i, ListeClause *c );

/* Libere une liste de litteraux de la memoire */
void freeListeLitteraux( ListeLitteraux *l );


#endif
